package remoto;

import hbt.HibernateDAO;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;

import controlador.CPR;
import controlador.ODV;
import dominioDAO.ClienteDao;
import dominioDAO.CotizacionDAO;
import dominioDAO.ListaPreciosDAO;
import dominioDAO.OrdenCompraProveedorDAO;
import dominioDAO.ProveedorDAO;
import dominioDAO.RodamientoDAO;
import dominioDAO.SolicitudRodamientoDAO;
import dominioEntity.Cliente;
import dominioEntity.Cotizacion;
import dominioEntity.ItemCotizacion;
import dominioEntity.ItemListaPrecios;
import dominioEntity.OrdenCompraProveedor;
import dominioEntity.Proveedor;
import dominioEntity.RemitoCliente;
import dominioEntity.Rodamiento;
import dominioEntity.SolicitudRodamientos;
import dominioTO.ClienteTO;
import dominioTO.CotizacionTO;
import dominioTO.ItemCotizacionTO;
import dominioTO.ItemListaPreciosTO;
import dominioTO.ListaPreciosTO;
import dominioTO.OrdenCompraProveedorTO;
import dominioTO.OrdenPedidoClienteTO;
import dominioTO.ProveedorTO;
import dominioTO.RemitoClienteTO;
import dominioTO.RemitoProveedorTO;
import dominioTO.RodamientoTO;
import dominioTO.SolicitudRodamientosTO;

public class GestionRemota implements InterfazRemota{

	private HibernateDAO hdao;
	
	public GestionRemota()
	{
		super();
		hdao = HibernateDAO.getInstancia();
	}
		

	@Override
	public void persistirCliente(List<ClienteTO> list) throws RemoteException {
		// TODO Auto-generated method stub
		ClienteDao.getInstancia().persistirCliente(list);
	}

	@Override
	public ClienteTO buscarCliente(String cuit) throws RemoteException {
		// TODO Auto-generated method stub
		Cliente cli = ClienteDao.getInstancia().buscarCliente(cuit);
		
		if(cli==null)
		{
			ClienteTO aux = new ClienteTO();
			return aux;
		}		
		return cli.getDTO();
	}


	@Override
	public void persistirProveedor(List<ProveedorTO> list)
			throws RemoteException {
		// TODO Auto-generated method stub
		ProveedorDAO.getInstancia().persistirProveedor(list);
	}


	@Override
	public ProveedorTO buscarProveedor(String cuit) throws RemoteException {
		// TODO Auto-generated method stub
		
		Proveedor prov = ProveedorDAO.getInstancia().buscarProveedor(cuit);		
		if(prov==null)
		{
			return new ProveedorTO();
		}
			
		return prov.getDTO();
	}


	@Override
	public void persistirSolicitudRodamientosCliente(List<SolicitudRodamientosTO> list) throws RemoteException 
	{
		// TODO Auto-generated method stub
		SolicitudRodamientoDAO.getInstancia().persistirSolicitudCliente(list);
		
	}

	@Override
	public CotizacionTO generarCotizacion (String cuit, String OrdenCliente) throws RemoteException {
		// TODO Auto-generated method stub
		SolicitudRodamientos aux= SolicitudRodamientoDAO.getInstancia().buscarSolicitudRodamiento(cuit, OrdenCliente);
		
		CotizacionDAO.getInstancia().cotizarSolicitudCliente(aux);
		Cotizacion coti2 = CotizacionDAO.getInstancia().buscarCotizacionPorSolicitud(aux);
		
		return coti2.getDTO();
		
	}
	
	@Override
	public RodamientoTO buscarRodamiento(String nSerie,String  sufijo,String  prefijo,String  origen) throws RemoteException
	{
		Rodamiento rod = RodamientoDAO.getInstancia().getRodamiento(nSerie, sufijo, prefijo, origen);
		
		if(rod !=null)
		{
			return rod.getDTO();
		}
		return new RodamientoTO();
	}


	@Override
	public void persistirListaPrecios(ListaPreciosTO listaTO)
			throws RemoteException {
		// TODO Auto-generated method stub
		ListaPreciosDAO.getInstancia().persistirListaTO(listaTO);
	}
	
	public List<OrdenCompraProveedorTO> generarOrdenesDePedidoAProveedores() throws RemoteException {
		// TODO Auto-generated method stub
		System.out.println("Ordenes");
		List<OrdenCompraProveedor> ordenes = CPR.getInstancia().generarOrdenesDeCompraProveedores();
		List<OrdenCompraProveedorTO> ordenesTO = new ArrayList<OrdenCompraProveedorTO>();
		
		for(OrdenCompraProveedor oc: ordenes)
		{
			ordenesTO.add(oc.getDTO());
		}
		return ordenesTO;
	}
	
	//persisto las ordenes de clientes
	public void persistirOrdenPedidoCliente(OrdenPedidoClienteTO OP) throws RemoteException{
		ODV.getInstancia().altaOrdenPedidoCliente(OP);
	}

	
	public ItemCotizacionTO getItemCotizacionOPCliente(Integer nroCotizacion, RodamientoTO rodTO, Integer cantidad) throws RemoteException
	{
		Rodamiento rod = Rodamiento.convertirTO(rodTO);
		ItemCotizacion item = ODV.getInstancia().getItemCotizacionOPCliente(nroCotizacion, rod, cantidad);
		return item.getDTO();
	}
	
	public void cambiarPorcentajeDeGanancia(Integer i) throws RemoteException
	{
		CPR.getInstancia().setNuevoPorcentajeGanancia(i);
	}
	public ItemListaPreciosTO getItemListaPrecioFromOrdenCompra(Integer id, RodamientoTO rod) throws RemoteException
	{
		Rodamiento rodamiento = Rodamiento.convertirTO(rod);
		ItemListaPrecios itemLista = OrdenCompraProveedorDAO.getInstancia().buscarItemLista(id, rodamiento);
		return itemLista.getDTO();
		
	}
	public OrdenCompraProveedorTO buscarOrdenCompraProveedor(Integer id) throws RemoteException
	{
		OrdenCompraProveedor oCProveedor = OrdenCompraProveedorDAO.getInstancia().buscarOrdenCompraProveedorPorId(id);
		return oCProveedor.getDTO();
	}
	public void persistirRemitoProveedor(RemitoProveedorTO dto) throws RemoteException
	{
		CPR.getInstancia().persistirRemitoProveedor(dto);
	}


	@Override
	public void procesarRemitosProveedores()
			throws RemoteException {
		CPR.getInstancia().procesarRemitosProveedores();
		
	}


	@Override
	public List<RemitoClienteTO> verificarOrdenesClienteConSock()
			throws RemoteException {
		// TODO Auto-generated method stub
		List<RemitoCliente> remitos = ODV.getInstancia().verificarOrdenesClienteConSock();
		List<RemitoClienteTO> remitosTO = new ArrayList<RemitoClienteTO>();
		for(RemitoCliente remito: remitos)
		{
			remitosTO.add(remito.getDTO());
		}
		return remitosTO;
	}
	
}
